package sopt.dev.data;

import java.util.List;

/**
 * @FileName  : DataModel.java
 * @Project     : Gagebu
 * @Date         : 2013. 8. 23. 
 * @작성자      : Dev
 * @변경이력 :
 * @프로그램 설명 :리스트 형태의 데이터를 가지는 추상화 모델 클래스
 * 			    기본적인 CRUD 구현 , 제네릭으로 정확성 및 확장성 보장
 */
public abstract class DataModel<T> {

	List<T> itemList;

	protected void setListData(List<T> datas) {
		this.itemList = datas;
	}

	void addItem(T item) {
		itemList.add(item);
	}
	
	void addItem(T item, int position) {
		itemList.add(position, item);
	}
	
	void setItem(T item, int position) {
		itemList.set(position, item);
	}
	
	T findItem(Object searchKey) {
		return null;
	}

	List<T> readAllItem() {
		return null;

	}
	void delItem(Object searchKey) {
		itemList.remove(searchKey);
	}
	
	void updateItem(T item, int position) {
		itemList.set(position, item);
	}

	/**
	 * @Method Name  : extractDatafromDB
	 * @작성일   : 2013. 8. 23. 
	 * @작성자   : Dev
	 * @변경이력  :
	 * @Method 설명 :  DB로부터 데이터를 뽑아와 자료구조에 맞게 저장하는 추상 메소드
	 */
	protected abstract void extractDatafromDB();
	
	
	/**
	 * @Method Name  : saveToDB
	 * @작성일   : 2013. 8. 23. 
	 * @작성자   : Dev
	 * @변경이력  :
	 * @Method 설명 : 자료구조를 통째로 DB로 저장하는 추상 메소드
	 */
	protected abstract void saveToDB();

}
